home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet multimedia / Animacje, filmy i prezentacje / Modelowanie 3D / Wings 3D 0.98.35 / wings-0.98.35.exe / lib / wood.fs < prev    next >
Text File  |  2006-07-19  |  2KB  |  54 lines

  1. //
  2. //  wood.fs --
  3. //
  4. //     Simple wood shader stolen from RenderMonkey
  5. //
  6. //  Copyright (c) 2006 Dan Gudmundsson
  7. //
  8. //  See the file "license.terms" for information on usage and redistribution
  9. //  of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10. //
  11. //     $Id: wood.fs,v 1.4 2006/01/27 15:17:56 dgud Exp $
  12. //
  13.  
  14. uniform vec4  darkWood;
  15. uniform vec4  liteWood;
  16. uniform float frequency;
  17. uniform float noiseScale;
  18. uniform float scale;
  19. uniform vec3 auv_bbpos3d[2];
  20. varying vec3 w3d_pos;
  21. uniform sampler3D auv_noise;
  22.  
  23. float auv_noise(float P, vec3 pos)
  24. {
  25.     float temp = P, total;
  26.     vec4 per = vec4(1.0,temp,temp*temp,temp*temp*temp*temp);
  27.     total = 1.0/dot(per, vec4(1.0));
  28.     per  *= total;
  29.     vec4 noise = texture3D(auv_noise, pos);
  30.     return dot(per,noise);
  31. }
  32.  
  33. void main(void)
  34. {
  35.   // Signed noise
  36.   vec3 ch_center = (auv_bbpos3d[1]-auv_bbpos3d[0]);
  37.   float ch_scale  = scale*1.41421/length(ch_center);
  38.   ch_center = (ch_center/2.0) + auv_bbpos3d[0];
  39.   vec3 pos = (ch_scale*(w3d_pos-ch_center))+0.5;
  40.   float snoise = 2.0 * auv_noise(0.5,pos) - 1.0;
  41.   
  42.   // Stretch along y axis
  43.   vec2 adjustedScaledPos = vec2(w3d_pos.x, w3d_pos.y*.25);
  44.   // Rings are defined by distance to z axis and wobbled along it
  45.   // and perturbed with some noise
  46.   float ring = 0.5*(1.0+sin(5.0*sin(frequency*w3d_pos.z)+
  47.                 frequency*(noiseScale*snoise+
  48.                        6.28*length(adjustedScaledPos.xy))));    
  49.   // Add some noise and get base color
  50.   float lrp = ring + snoise;
  51.   gl_FragColor = mix(darkWood, liteWood, lrp);
  52. }
  53.  
  54.